import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
  // output: 'standalone', // 生成独立的输出目录，适用于容器（例如：docker）或云平台部署（有Bug，不使用）
  async rewrites() {
    return [
      // 将 /image/:path* 的请求重定向到 /api/image/:path*
      {
        source: '/image/:path*',
        destination: '/api/image/:path*',
      },
    ];
  },
  /* config options here */
  webpack(config) {
    // Support SVG Component
    config.module.rules.push({
      test: /\.svg$/i,
      use: [
        {
          loader: '@svgr/webpack',
          options: {
            icon: true,
            svgProps: {
              fill: 'currentColor',
            },
          },
        },
      ],
    });
    return config;
  },
  // `next dev --turbopack` 开启 turbo 模式，使用 Turbopack 打包，提升编译和热更新速度
  // @see https://nextjs.org/docs/app/api-reference/turbopack
  turbopack: {
    // Support SVG Component: 开启 turbopack 模式时，不使用 webpack 打包，因此需要配置和 webpack 相同的附加 rules
    rules: {
      '*.svg': {
        loaders: [
          {
            loader: '@svgr/webpack',
            options: {
              icon: true,
              svgProps: {
                fill: 'currentColor',
              },
            },
          },
        ],
        as: '*.js',
      },
    },
  },
  productionBrowserSourceMaps: false, // 生产环境关闭 source map, 以减小打包体积，防止代码泄露
  experimental: {
    typedEnv: true,
    serverActions: {
      bodySizeLimit: '50mb', // 服务器端请求体大小限制，默认情况下，发送到服务器操作的请求体最大大小为 1MB，以防止在解析大量数据时消耗过多的服务器资源，以及潜在的 DDoS 攻击。
    },
  },
  eslint: {
    ignoreDuringBuilds: true, // 忽略构建时的 eslint 检查, 以加快构建速度，推荐使用git前置检查：git commit hook 中检查（利用husky + lint-staged）
  },
};

export default nextConfig;
